📅  最后修改于: 2023-12-03 15:11:17.262000             🧑  作者: Mango
在字符串匹配中,经常需要在给定字符串中查询一些信息,例如该字符串的旋转和第K个字符。这里我们提供一种Java程序,可以在恒定时间内查询给定字符串的旋转和第K个字符。
public class StringManipulator {
private final String s;
private final int n;
public StringManipulator(String s) {
this.s = s;
this.n = s.length();
}
// 按字符旋转字符串
public String rotate(int k) {
k %= n;
return s.substring(k) + s.substring(0, k);
}
// 查询字符串的第k个字符
public char kthChar(int k) {
k %= n;
if (k < 0) k += n;
return s.charAt(k);
}
}
String s = "programming";
StringManipulator sm = new StringManipulator(s);
// 旋转字符串
String rotated = sm.rotate(3); // "grammingpro"
// 查询第k个字符
char c = sm.kthChar(4); // 'g'
我们通过一个示例来解释程序的使用方法:
String s = "programming";
StringManipulator sm = new StringManipulator(s);
String rotated = sm.rotate(3); // "grammingpro"
这里将原字符串 "programming"
按字符旋转3位得到 "grammingpro"
。
另外,我们可以通过下面的代码查询原字符串的第4个字符:
char c = sm.kthChar(4); // 'g'
这里返回原字符串的第4个字符 'g'
。
程序的时间复杂度为O(n),其中n为字符串的长度,因为两个操作都是基于一些简单的字符串操作,可以在恒定时间内完成。因此,可以说该程序具有高效性和稳定性。