2011-01-28 94 views
1

我的问题是我想返回两个字符串s1,s2的公共子字符串。显然,s1和s2是对称的。为参数创建一个副本或使用参考?

string shortest_common(const string& s1, const string& s2) { 

} 

对于这个问题,有三种可能的解决方案,我想出了:

  • 要么使S1副本和s2
  • 或交换他们,这意味着我必须牺牲自己的常量性别
  • 或者最差,重复的代码!

我个人比较喜欢第一种情况,因为意图是找到不改变s1或s2的最短公共字符串。所以我的问题是:在这种情况下哪个选项是理想的?

感谢,

+0

他们是对称的含义回文?因为'abba'和'cabbac'是有效的输入,'abba'会是结果吗? – mkb 2011-01-28 18:11:45

+5

等待,最短的常用字符串?这甚至不是很关键,因为答案总是“”:) – mkb 2011-01-28 18:12:15

+0

@Matt Kane:这是一个修改版本,不是传统的回文。它有很多我必须处理的子情况。 – Chan 2011-01-28 18:14:39

回答

2

我会选择去与你已经显示的签名。如果你找到一个共同的子字符串,那么你不想有副作用。当人们称他们为你的功能时,这并不是人们所想的。我不希望称为“add_two_numbers”的函数修改其中一个数字并返回一个值。

0

您可以使用递归来交换参数的含义,而无需以任何方式更改对象本身。

0

我对你的实际问题有些困惑,所以我会根据标题来判断。

两者兼具

void shortest_common(string& s1, const string& s2) 
{ 
    // real algorithm changing s1 
} 

inline string shortest_common(string s1, const string& s2) 
{ 
    shortest_common(s1, s2); 
    return s1; 
}